package com.gilalsoft.negocio.fachada;



import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.mail.MessagingException;
import javax.naming.NamingException;

import com.gilalsoft.negocio.utilidades.CorreoElectronico;
import com.glialsoft.negocio.dtos.Historia_ClinicaDTO;
import com.glialsoft.negocio.dtos.Historia_PsicologicaDTO;
import com.glialsoft.negocio.dtos.Historia_SocialDTO;
import com.glialsoft.negocio.dtos.PacienteDTO;
import com.glialsoft.negocio.dtos.RolesDTO;
import com.glialsoft.negocio.dtos.UsuarioDTO;
import com.glialsoft.persistencia.daos.HistoriaClinicaDAO;
import com.glialsoft.persistencia.daos.HistoriaPsicologicaDAO;
import com.glialsoft.persistencia.daos.HistoriaSocialDAO;
import com.glialsoft.persistencia.daos.PacienteDAO;
import com.glialsoft.persistencia.daos.UsuarioDAO;
import com.glialsoft.persistencia.entidades.HistoriasSociles;
import com.glialsoft.persistencia.entidades.Roles;
import com.glialsoft.persistencia.entidades.Usuario;

/**
 * Session Bean implementation class FachadaManaged
 */
@Stateless
@LocalBean
public class FachadaManaged {

   
	
	private PacienteDAO pacienteDAO = new PacienteDAO();
	
	private  CorreoElectronico correoElectronico = new CorreoElectronico();
	private HistoriaPsicologicaDAO hisotiralPsicologico = new HistoriaPsicologicaDAO();
	
	@EJB
	private HistoriaSocialDAO historiaSocialDAO;
	@EJB
	private UsuarioDAO usuarioDAO ;
	@EJB
	private HistoriaClinicaDAO historiaClinicaDAO;
	
	/**
     * Default constructor. 
     */
    
	public FachadaManaged() {
        // TODO Auto-generated constructor stub
    
    }

   
    
    public void agregarPaciente(PacienteDTO pacienteDTO){
    	
   
    	
    pacienteDAO.registrarNuevoPAciente(pacienteDTO);
    
   
    
    }


    public PacienteDTO uscaPacientePorCedula(String cedula){
    	
      PacienteDTO paciente =pacienteDAO.burcarPorCedula(cedula);
      paciente.setHistoria_ClinicaDTO(historiaClinicaDAO.darHistoriaClinicaPaciente(paciente.getId_paciente()));
      paciente.setHistoria_PsicologicaDTO(hisotiralPsicologico.darHistoriaPsicologico(paciente.getId_paciente()));
    
       paciente.setHistoria_socialDTO(listaHistoriaSocil(paciente.getId_paciente()));
    	
    	return paciente;
    }
    
    
    
    public UsuarioDTO validarUsuario(String nombre , String password){
    	UsuarioDTO usuLo = new UsuarioDTO();
    	Usuario usu= usuarioDAO.valdiarLogin(nombre, password);
    	
    	if(usu!=null){
    		usuLo.setIdUsuario(usu.getIdUsuario());
    		usuLo.setNombre(usu.getNombre());
    		usuLo.setPassword(usu.getPassword());
    		RolesDTO nuevoRol = new RolesDTO();
    		nuevoRol.setIdRol(usu.getRoles().getIdRol());
    		nuevoRol.setNombreRol(usu.getRoles().getNombreRol());
    		
    		
    		usuLo.setRol(nuevoRol);
    	    usuLo.setEmail(usu.getEmail());
    	    usuLo.setTelefono(usu.getTelefono());
    	}
    	
    	return usuLo;
    }
    
    public void registrarHistoriaClinica(Historia_ClinicaDTO historia_clinica){
    	historiaClinicaDAO.registrarHistoria(historia_clinica);
    	
    }


    public void registrarHistoriaPsicolocia(Historia_PsicologicaDTO historia_PsicologicaDTO){
    	hisotiralPsicologico.registrarHistoria(historia_PsicologicaDTO);
    	
    }
    
    
    public void registrarHistoriaSocial(Historia_SocialDTO historia_socialDTO){
      
    historiaSocialDAO.registrarHistoria(historia_socialDTO);
    }
    
    
    public void registrarUsuario(UsuarioDTO usuarioDTO){
    	
    	 String mensaje="Bienvenido: "+usuarioDTO.getNombre() +"\n"+"Ya esta  registrado en el sistema \n  GlialSoft";
    	 usuarioDAO.agregarNuevoUsuario(usuarioDTO);
    
    try {
		correoElectronico.enviarCorreo(usuarioDTO.getEmail(), "Registro de Usuario GlialSoft", mensaje);
	} catch (NamingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (MessagingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
    }
    
    public void actualizarUsuario(UsuarioDTO usuarioDTO){
    	usuarioDAO.actualizaroUsuario(usuarioDTO);
    }
    
    public PacienteDAO getPacienteDAO() {
		return pacienteDAO;
	}


    
    public List<RolesDTO> darListaRoles(){
    	List<RolesDTO> listaR = new ArrayList<RolesDTO>();
    	List<Roles> listaB= usuarioDAO.ListaRoles();
    	for(int i=0; i<listaB.size();i++){
    		RolesDTO nuevoItem = new RolesDTO();
    		nuevoItem.setIdRol(listaB.get(i).getIdRol());
    		nuevoItem.setNombreRol(listaB.get(i).getNombreRol());
    		listaR.add(nuevoItem);
    		
    	}
    	
    	
    	
    	return listaR;
    }
    
    public UsuarioDTO buscarUsuario(int id_usuario){
    	UsuarioDTO usuBu = new UsuarioDTO();
    	Usuario usuEn = usuarioDAO.darUsuario(id_usuario);
    	if(usuEn!=null){
    		usuBu.setIdUsuario(usuEn.getIdUsuario());
    		usuBu.setNombre(usuEn.getNombre());
    		usuBu.setPassword(usuEn.getPassword());
    		usuBu.setEmail(usuEn.getEmail());
    		RolesDTO rol = new RolesDTO();
    		rol.setIdRol(usuEn.getRoles().getIdRol());
    		rol.setNombreRol(usuEn.getRoles().getNombreRol());
    		usuBu.setRol(rol);
    		usuBu.setTelefono(usuEn.getTelefono());
    		
    	}
    	
    	return usuBu;
    }
    public List<UsuarioDTO> darListaUsuario(){
    	List<UsuarioDTO> listaUsuaio = new ArrayList<UsuarioDTO>();
    List<Usuario> usuarioLista= usuarioDAO.listaUsuarios();
    for (int i = 0; i < usuarioLista.size(); i++) {
		UsuarioDTO nuevoU = new UsuarioDTO();
		Usuario temp = usuarioLista.get(i);
		nuevoU.setIdUsuario(temp.getIdUsuario());
		nuevoU.setNombre(temp.getNombre());
		nuevoU.setPassword(temp.getPassword());
		nuevoU.setEmail(temp.getNombre());
		RolesDTO nuevoRol = new RolesDTO();
		nuevoRol.setIdRol(temp.getRoles().getIdRol());
		nuevoRol.setNombreRol(temp.getRoles().getNombreRol());
		
		nuevoU.setRol(nuevoRol);
		nuevoU.setTelefono(temp.getTelefono());
		listaUsuaio.add(nuevoU);
    	
    	
	}
    	
    	
    return listaUsuaio;
    }
    
    
    public ArrayList<Historia_SocialDTO> listaHistoriaSocil(int idPaciente){
    ArrayList<Historia_SocialDTO> listaDTO = new ArrayList<Historia_SocialDTO>();
    	List<HistoriasSociles> listaEntity = historiaSocialDAO.listaHistorias(idPaciente);
    	
    	for (int i = 0; i < listaEntity.size(); i++) {
    		HistoriasSociles temp = listaEntity.get(i);
    		Historia_SocialDTO his = new Historia_SocialDTO();
    		his.setEstrato(temp.getEstrato());
    		his.setTipo_eps(temp.getTipoEps());
    		his.setLocalidad(temp.getLocalidad());
    		his.setAntecedentes(temp.getAntecedentes());
			listaDTO.add(his);
		}
    	
    	return listaDTO;
    }

	public void setPacienteDAO(PacienteDAO pacienteDAO) {
		this.pacienteDAO = pacienteDAO;
	}



    
    
	


	
    
    
}
